package com.kfm.base.collection;


import java.util.*;
import java.util.function.Consumer;

public class Exer01 {

    public static void exer1() {
        List<String> list = new ArrayList<>();

        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("a");
        list.add("c");

        Set<String> set = new HashSet<>(list);

        System.out.println(set.size());

        for (String str : set) {
            System.out.println(str);
        }
    }

    public static void exer2() {
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();

        list1.add("a");
        list1.add("b");
        list1.add("c");
        list1.add("d");

        list2.add("c");
        list2.add("d");
        list2.add("f");
        list2.add("e");

        list1.retainAll(list2);
        System.out.println(list1);
    }

    public static void exer3() {
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();

        list1.add("a");
        list1.add("b");
        list1.add("c");
        list1.add("d");

        list2.add("c");
        list2.add("d");
        list2.add("f");
        list2.add("e");

        list1.removeAll(list2);

        System.out.println(list1);
    }

    public static void exer4() {
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();

        list1.add("a");
        list1.add("b");
        list1.add("c");
        list1.add("d");

        list2.add("c");
        list2.add("d");
        list2.add("f");
        list2.add("e");

        HashSet<String> set = new HashSet<>(list1);

        set.addAll(list2);

        list1.retainAll(list2);

        set.removeAll(list1);

//        List<String> c1 = new ArrayList<>();
//        c1.addAll(list1);
//
//        c1.removeAll(list2); // a b
//        list2.removeAll(list1); // f e
//
//        c1.addAll(list2);
        System.out.println(set);
    }


    public static void exer6(HashSet<String> set) {
//        Iterator<String> iterator = set.iterator();
//
//        while (iterator.hasNext()){
//            String str = iterator.next();
//            if (str.length() % 2 != 0){
//                iterator.remove();
//            }
//        }

        set.removeIf((e) -> e.length() % 2 != 0);
    }

    public static void exer7(String string) {

        String[] charArray = string.split("");
        List<String> list = Arrays.asList(charArray);

        // 所有出现过的字符
        HashSet<String> set = new HashSet<>(list);

        Iterator<String> iterator = set.iterator();

        while (iterator.hasNext()){
            String str = iterator.next();
            int count = 0;

            Iterator<String> iterator1 = list.iterator();
            while (iterator1.hasNext()){
                String c = iterator1.next();
                if (str.equals(c)){
                    count ++;
                }
            }

            System.out.println(str + " 出现了 " + count + " 次");
        }
    }

    public static void exer8(String string) {

        while(string.length() > 0){
            // 取字符串第一个字符
            String c = string.substring(0, 1);
            // 第一个字符全部删掉
            String s = string.replaceAll(c, "");
            // 计算出现的次数
            int count = string.length() - s.length();
            System.out.println(c + " 出现了 " + count + " 次");

            string = s;
        }

    }

    public static void exer9(String string) {

        String[] split = string.split("");
        List<String> arr = Arrays.asList(split);

        List<String> list = new ArrayList<>(arr);

        while (list.size() > 0){
            String c =  list.get(0);
            int size = list.size();
            list.removeIf( (e) ->
                e.equals(c)
            );

            int count = size - list.size();
            System.out.println(c + " 出现了 " + count + " 次");
        }


    }
    public static void main(String[] args) {
        List<String> set = new ArrayList<>();
        set.add("abc");
        set.add("abcd");
        set.add("ab");
        set.add("abcde");
        set.add("abcf");
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("a");
        set.add("c");

        exer9("aabbccddeefghab,! ");

        set.forEach(new MyConsumer());

//        set.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });

//        set.forEach( s -> {
//            System.out.println(s);
//        });

//        System.out.println(set);

//        int count = 0;
//        Counter count = new Counter();
//
//        new Comparable<>() {
//            @Override
//            public int compareTo(Object o) {
//                count.plus();
//                return 0;
//            }
//        };
//
//        count.getCount();


    }
}

class MyConsumer implements Consumer<String>{

    @Override
    public void accept(String s) {
        System.out.println(s);
    }
}


class Counter {

    private int count;

    public void plus(){
        count ++;
    }

    public int getCount(){
        return count;
    }
}